package com.hgsoft.pubsv.component.apifilter.propertie;

import java.util.HashMap;
import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import lombok.Data;

/**
 * 接口安全配置
 * 
 * @author saint
 *
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "pubsv-security")
public class SecurityPropertie {

	/**
	 * 过滤器拦截模式
	 */
	private String[] urlPatterns = new String[] { "/*" };

	/**
	 * 过滤器执行顺序
	 */
	private Integer order = 1;

	/**
	 * 是否开启debug模式
	 */
	private Boolean isDebug = false;

	/**
	 * 入参是否解密，默认解密
	 */
	private Boolean inDecode = true;

	/**
	 * 出参是否加密，默认加密
	 */
	private Boolean outEncode = true;

	/**
	 * 是否需要登录token校验，默认需要
	 * 
	 * @return
	 */
	private Boolean needCheckToken = true;

	/**
	 * 是否需要校验时间戳，默认需要 需要时需带上请求参数，系统会校验时间有效期，时间超过一定范围不处理
	 * 
	 * @return
	 */
	private Boolean needCheckTime = true;

	/**
	 * 忽略加密解密参数 按:分割 例a:b
	 * 
	 * @return
	 */
	private String ignoreParameter = "";

	/**
	 * 加解密方法,支持AES或者RSA或者RSAWITHAES，默认支持所有
	 * 
	 * @return
	 */
	private String encryptType = "";

	/**
	 * 是否开启ipLimit，同一IP才能访问一次接口，默认不需要
	 * 
	 * @return
	 */
	private Boolean ipLimit = false;

	/**
	 * 获取IP限制时间范围 单位秒
	 */
	private Integer ipLimitPeriod = 300;

	/**
	 * 获取IP限制访问次数
	 */
	private Integer ipLimitCount = 3;
	/**
	 * 不用校验token的接入方渠道编码
	 */
	private String notTokenAccessNo = "";

	/**
	 * 接入方限制ip白名单
	 */
	private Map<String, String> accessNoAuthIps = new HashMap<>();

	/**
	 * 接入方AES密钥配置
	 */
	private Map<String, String> accessNoAesKey = new HashMap<>();

	/**
	 * 接入方Rsa平台私钥配置
	 */
	private Map<String, String> accessNoRsaPrivateKey = new HashMap<>();

	/**
	 * 接入方Rsa渠道公钥配置
	 */
	private Map<String, String> accessNoRsaPublicKey = new HashMap<>();

	/**
	 * token允许授权访问限制url数组
	 */
	private Map<String, String> tokenAuthUrl = new HashMap<>();

	/**
	 * 根据接入方获取授权ip
	 * @param accessNo
	 * @return
	 */
	public String getAuthIpsByAccessNo(String accessNo) {
		return accessNoAuthIps.get(accessNo);
	}
	
	/**
	 * 根据接入方获取AesKey
	 * @param accessNo
	 * @return
	 */
	public String getAesKeyByAccessNo(String accessNo) {
		return accessNoAesKey.get(accessNo);
	}
	
	/**
	 * 根据接入方获取RsaPrivateKey
	 * @param accessNo
	 * @return
	 */
	public String getRsaPrivateKeyByAccessNo(String accessNo) {
		return accessNoRsaPrivateKey.get(accessNo);
	}
	
	/**
	 * 根据接入方获取RsaPublicKey
	 * @param accessNo
	 * @return
	 */
	public String getRsaPublicKeyByAccessNo(String accessNo) {
		return accessNoRsaPublicKey.get(accessNo);
	}
	
	/**
	 * 根据接入方获取 token允许授权访问限制url数组
	 * @param businessType
	 * @return
	 */
	public String getTokenAuthUrlByBusinessType(String businessType) {
		return tokenAuthUrl.get(businessType);
	}
}
